0 REM:MUSICOM 64:COPYRIGHT 1985 BY JOE KACZYNSKI 5 CLR:S=54272:FORL=STOS+24:POKEL,0:NEXT 10 DIMH%(2,1450),L%(2,1450),C%(2,1450),D(3),R(3),V(3),FQ(11):Z=0 15 FORA=0TO11:READFQ(A):NEXT:POKE53281,0 20 POKE53280,2:PRINT"[147][154] [146]" 25 PRINT" WELCOME TO SONGFEST [146]" 30 PRINT"[154] [146]" 35 PRINT"MENU[146]" 40 PRINT"R[154]= READ [150]PREPROGRAMMED SONG FROM DISK" 45 PRINT"P= PLAY SONG ONCE" 50 PRINT"C= CONTINUOUS [150]PLAY SPACEBAR [150]TO END[146]" 55 PRINT"I= INPUT NOTES OF YOUR OWN SONG" 60 PRINT"A= ADD [150]NOTES TO SONG" 65 PRINT"M= MODIFY [153]WAVEFORM, A/D, S/R" 70 PRINT"S= SOUND [150]CHANGE DURING PLAYBACK" 75 PRINT"E= ERROR CORRECTION [153]AFTER INPUT" 80 PRINT"K= [153]KEYBOARD SYNTHESIZER" 85 PRINT"Q= QUIT AND EXIT PROGRAM" 90 GETA$:IFA$=""THEN90 95 GOSUB165 100 IFA$="R"THENGOSUB525:IFVA%=3THEN375:GOTO20 105 IFA$="P"THEN155 110 IFA$="C"THEN155 115 IFA$="I"THEN195 120 IFA$="A"THENZ=2:I=IM:D=IM:GOTO240 125 IFA$="M"THENZ=1:GOSUB195:GOTO20 130 IFA$="S"THENGOSUB825:GOTO20 135 IFA$="E"THENZ=3:GOTO645 140 IFA$=CHR$(81)THENEND 145 IFA$="K"THENPRINT"[147]":GOTO895 150 GOTO20 155 IFIM<>0THEN375 160 GOTO20 165 IFA$<>"R"ANDA$<>"I"ANDA$<>"P"THENRETURN 170 IFA$="P"ANDIM=0THENRETURN 175 PRINT"[147][153]HOW MANY VOICES WOULD YOU LIKE?[146]" 180 INPUT" (1,2,OR 3)";VA% 185 IFVA%>3ORVA%<1THENPRINT"PLEASE REENTER (1 2 OR 3)[146]":GOTO175 190 VB%=VA%-1:RETURN 195 FORK=0TOVB% 200 PRINT"[147]PARAMETERS FOR VOICE"K"ARE NOW:W/F-"V(K)", A/D-"D(K)",S/R-"R(K) 205 PRINT"[153]ENTER NEW PARAMETERS FOR VOICE #"K":" 210 INPUT"[153]W/F(17,33,65)";V(K) 215 IFV(K)=65THENINPUT"HI PULSE(0-15)";HP(K):INPUT"LO PULSE(0-255)";LP(K) 220 INPUT"[150]A/D(0TO255)";D(K) 225 INPUT"S/R(0TO255)";R(K) 230 IFZ=1THENNEXT:Z=0:RETURN 235 NEXT 240 FORK=0TOVB%:IFZ=2THENI=D:GOTO250 245 I=0:D=0 250 PRINT"[147]RECORD MEASURE #[160](CLOSEST TO NOTE,ONLY)" 255 PRINT"BEFORE GOING TO NEXT VOICE OR FOR NOTE ERROR CORRECTION[146]" 260 PRINT"[153]VOICE #"K" [150]ENTER NOTES" 265 PRINT"[153]ENTER 0,0,0 TO GO TO NEXT VOICE" 270 IFZ=3THENZ=0:GOTO20 275 GOSUB710 280 IFK=2ANDI=IMTHEND=IM 285 IFNM=0ANDK<>0ANDI<>IMTHENPRINT"[147][150]ERROR IN ENTRY. REDO LAST SERIES" 290 IFNM=0ANDK<>0ANDI<>IMTHENI=D:IM=D:FORT=1TO2000:NEXT:GOTO240 295 IFNM=0THEN365 300 B=I/16 305 WA=V(K):IFNM<0THENNM=-NM:WA=1 310 DR%=NM/128:OC%=(NM-128*DR%)/16 315 NT=NM-128*DR%-16*OC% 320 FR=FQ(NT) 325 IF OC%=7THEN335 330 FORJ=6TOOC%STEP-1:FR=FR/2:NEXT 335 HF%=FR/256:LF%=FR-HF%*256 340 IFDR%=1THENH%(K,I)=HF%:L%(K,I)=LF%:C%(K,I)=WA:I=I+1:C=I/16 345 IFDR%=1THENPRINT"[145][153]MEAS."B"[153]TO"C:GOTO270 350 FORJ=1TODR%-1:H%(K,I)=HF%:L%(K,I)=LF%:C%(K,I)=WA:I=I+1:NEXT 355 H%(K,I)=HF%:L%(K,I)=LF%:C%(K,I)=WA-1 360 I=I+1:C=I/16:PRINT"[145][153]MEAS."B"[153]TO"C:GOTO270 365 IFK=0THENIM=I 370 NEXT:Z=0:GOTO20 375 REM SONG WORDS 380 IFIM<>0THEN390 385 GOTO395 390 PRINT"[147][153] NOW PLAYING  ";NS$ 395 POKES+18,0:POKES+4,0:POKES+11,0 400 ONVA%GOTO415,410,405 405 POKES+19,D(2):POKES+20,R(2):POKES+16,LP(2):POKES+17,HP(2) 410 POKES+12,D(1):POKES+13,R(1):POKES+9,LP(1):POKES+10,HP(1) 415 POKES+5,D(0):POKES+6,R(0):POKES+2,LP(0):POKES+3,HP(0) 420 POKES+24,15 425 A1$="" 430 FORI=0TOIM 435 GETA1$:IFA1$=" "THENPOKES+24,0:GOTO20 440 ONVA%GOTO455,450,445 445 POKES+14,L%(2,I):POKES+15,H%(2,I):POKES+18,C%(2,I) 450 POKES+7,L%(1,I):POKES+8,H%(1,I):POKES+11,C%(1,I) 455 POKES,L%(0,I):POKES+1,H%(0,I):POKES+4,C%(0,I) 460 ONVA%GOTO465,470,475 465 FORR=1TO28:NEXT 470 FORR=1TO28:NEXT 475 NEXT 480 IFA$="C"THEN155 485 POKES+24,0 490 PRINT"[147][153]DO YOU WISH TO WRITE THE SONG TO DISK? Y/N " 495 GETA$:IFA$=""THEN495 500 IFA$="Y"THENGOSUB585 505 GOTO20 510 DATA34334,36376,38539,40830 515 DATA43258,45830,48556,51443 520 DATA54502,57743,61176,64814 525 PRINT"[147]":POKE53280,4 530 PRINT"[147] CHOOSE A SONG AND ENTER THE[153] NAME ONLY [144] (WITHOUT QUOTES)" 535 INPUT"[153]NAME OF SONG";NS$ 540 X$="," 545 OPEN2,8,2,"00:"+NS$+",S,R":TI$="000000" 550 PRINT"[147][153] LOADING  ";NS$:PRINT"PLEASE WAIT[146]" 555 INPUT#2,IM:IFIM=0THEN580 560 FORK=0TOVB%:INPUT#2,V(K),D(K),R(K),LP(K),HP(K):NEXT 565 FORI=1TOIM:FORK=0TOVB%:INPUT#2,H%(K,I),L%(K,I),C%(K,I):NEXT 570 PRINT"[158]";TI$:NEXT 575 IFIM<>0THENCLOSE2:RETURN 580 PRINT"[147][150]FILE NOT FOUND [146]":CLOSE2:GOTO535 585 PRINT"[147]":PRINT"[153]INSERT DISK INTO DRIVE":PRINT"ENTER S TO SAVE" 590 PRINT"[150]ENTER N IF YOU CHANGE YOUR MIND" 595 GETA3$:IFA3$=""THEN595 600 IFA3$="N"THEN20 605 IFA3$="S"THEN615 610 GOTO595 615 X$=",":INPUT"[147]NAME OF SONG";NS$ 620 OPEN2,8,2,"00:"+NS$+",S,W 625 [153]"SAVING SONG TO DISKWAIT":[152]2,IM 630 [129]K[178]0[164]VB%:[152]2,V(K)X$D(K)X$R(K)X$LP(K)X$HP(K):[130] 635 [129]I[178]1[164]IM:[129]K[178]0[164]VB%:[152]2,H%(K,I)X$L%(K,I)X$C%(K,I):[130]:[130] 640 [160]2:[142] 645 [143] CHANGE NOTE AND OCTAVE 650 [153]"LOADPRINTENTER VOICE(0,1,OR 2)";:[133]K 655 [139]K[177]2[167][153]"LOAD LOADLOADLOAD":[137]650 660 [153]"LOADPRINTENTER MEASURE # FOR NOTE" 665 [153]"YOU WISH TO CHANGE" 670 [133]"PRINTENTER THIS NUMBERWAIT";E1 675 E2[178][181](E1):E[178]E2:[139]E[179]0[167]E[178]0 680 F[178](E1[171]E2)[172]16 685 I[178]16[172]E[170]F 690 [153]"LOADPRINTENTER NEW NOTE, OCTAVE, AND DURATION# " 695 [153]"DO NOT WAIT DEFCHANGE THE DURATION #." 700 [133]NP$,NO,ND 705 [141]715:[137]305 710 [133]"DEFN,PRINTO,CONTD";NP$,NO,ND 715 [139]NP$[178]"0"[167]NM[178]0:[142] 720 [139]NP$[178]"S"[167]NM[178][171]128[172]ND:[142] 725 [139]NP$[178]"C"[167]NP[178]0 730 [139]NP$[178]"C#"[167]NP[178]1 735 [139]NP$[178]"D&"[167]NP[178]1 740 [139]NP$[178]"D"[167]NP[178]2 745 [139]NP$[178]"D#"[167]NP[178]3 750 [139]NP$[178]"E&"[167]NP[178]3 755 [139]NP$[178]"E"[167]NP[178]4 760 [139]NP$[178]"F"[167]NP[178]5 765 [139]NP$[178]"F#"[167]NP[178]6 770 [139]NP$[178]"G&"[167]NP[178]6 775 [139]NP$[178]"G"[167]NP[178]7 780 [139]NP$[178]"G#"[167]NP[178]8 785 [139]NP$[178]"A&"[167]NP[178]8 790 [139]NP$[178]"A"[167]NP[178]9 795 [139]NP$[178]"A#"[167]NP[178]10 800 [139]NP$[178]"B&"[167]NP[178]10 805 [139]NP$[178]"B"[167]NP[178]11 810 [139]NP$[178]"C&"[167]NP[178]11 815 NM[178]128[172]ND[170]16[172]NO[170]NP 820 [142] 825 [153]"LOAD" 830 [153]"PRINTPRESS F1..F3..F5..F7" 835 [153]"FOR UNUSUAL HARMONICS" 840 [161] B$:[139]B$[178]""[167]840 845 [151]S[170]24,15 850 [139] B$[178]"INPUT"[167][151]S[170]5,9:[151]S[170]6,90:[151]S[170]12,8:[151]S[170]13,9 855 [139]B$[178]"INPUT"[167][151]S[170]19,6:[151]S[170]20,69:[137]425 860 [139]B$[178]"DIM"[167][151]S[170]5,63:[151]S[170]6,240:[151]S[170]12,113:[151]S[170]13,53 865 [139]B$[178]"DIM"[167][151]S[170]19,119:[151]S[170]20,7:[137]425 870 [139]B$[178]"READ"[167][151]S[170]5,36:[151]S[170]6,197:[151]S[170]12,53:[151]S[170]13,53:[151]S[170]10,6 875 [139]B$[178]"READ"[167][151]S[170]19,119:[151]S[170]20,7:[137]425 880 [139]B$[178]"LET"[167][151]S[170]5,15:[151]S[170]6,240:[151]S[170]12,10:[151]S[170]13,167:[151]S[170]10,0 885 [139]B$[178]"LET"[167][151]S[170]19,119:[151]S[170]20,240:[137]425 890 [142] 895 [156]:[151]53280,11:[153]"LOADKEYBOARD FUNCTIONWAIT" 900 [153]"PRINTF1..F3..F5..F7..SELECT OCTAVES" 905 [153]"CONTF2..F4..F6..SELECT WAVEFORMS." 910 [153]"PRINT#F8..MAINTAINS A NOTE TILL NEXT NOTE" 915 [153]"IS PLAYED" 920 [153]"PRINTPRESSING SPACEBAR SELECTS SOLO OR" 925 [153]"POLYPHONIC SOUND." 930 [153]"FORNOTES AND CORRESPONDING KEY CHART" 935 [153]"PRINTNOTE..C C# D D# E F F# G G# A A# B C" 940 [153] "KEY...Q 2 W 3 E R 5 T 6 Y 7 U I " 945 [153]"PRINTNOTES CONT. C# D D# E F F# G G# A" 950 [153]"KEYS CONT. 9 O 0 P @ - * \ ^" 955 [153]"PRESS PRINT Z FOR MAIN PROGRAMWAIT" 960 S[178]54272:[134]X(26):[134]Y(255):[129]I[178]0[164]28:[151]S[170]I,0:[130] 965 X1[178]7040:[129]I[178]1[164]26:X(27[171]I)[178]X1[172]5.8[170]30:X1[178]X1[173]2[174](1[173]12):[130] 970 Y$[178]"Q2W3ER5T6Y7UI9O0P@-*\^" 975 [129]I[178]1[164][195](Y$):Y([198]([202](Y$,I)))[178]I:[130] 980 AT[178]0:DE[178]0:SU[178]15:RE[178]10:SR[178]SU[172]16[170]RE:AD[178]AT[172]16[170]DE:WV[178]16:W[178]0:M[178]1:OC[178]4:HB[178]256 985 Z[178]0 990 [129]I[178]0[164]2:T[178]I[172]7:[151]S[170]5[170]T,AD:[151]S[170]6[170]T,SR 995 [151]S[170]2[170]T,4000[175]255:[151]S[170]3[170]T,4000[173]256:[130]:[151]S[170]24,15 1000 [161]D$:[139]D$[178]""[167]1000 1005 FR[178]Y([198](D$)):[139]FR[178]Z[167]1035 1010 FR[178]X(FR)[173]M:T[178]V[172]7:CR[178]S[170]T[170]4:[151]S[170]5[170]T,Z:[151]S[170]6[170]T,Z 1015 [151]CR,8:[151]CR,Z:[151]S[170]T,FR[171]HB[172][181](FR[173]HB):[151]S[170]1[170]T,FR[173]HB 1020 [151]S[170]5[170]T,AD:[151]S[170]6[170]T,SR:[151]CR,WV[170]1:[129]I[178]1[164]50[172]AT:[130]:[151]CR,WV 1025 [139]P[178]1[167]V[178]V[170]1:[139]V[178]3[167]V[178]0 1030 [137]1000 1035 [139]D$[178]"INPUT"[167]M[178]1:OC[178]4:[137]1000 1040 [139]D$[178]"DIM"[167]M[178]2:OC[178]3:[137]1000 1045 [139]D$[178]"READ"[167]M[178]4:OC[178]2:[137]1000 1050 [139]D$[178]"LET"[167]M[178]8:OC[178]1:[137]1000 1055 [139]D$[178]"GOTO"[167]W[178]0:WV[178]16:[137]1000 1060 [139]D$[178]"RUN"[167]W[178]1:WV[178]32:[137]1000 1065 [139]D$[178]"IF"[167]W[178]2:WV[178]64:[137]1000 1070 [139]D$[178]"RESTORE"[167]W[178]0:WV[178]17:[137]1000 1075 [139]D$[178]"Z"[167][151]S[170]24,0:[138]5 1080 [139]D$[178]" "[167]P[178]1[171]P:[137]1000 1085 [137]1000